﻿/************************************************************************************
 * xujiajun@yoozoo.com 御剑
 * 显示命令相关的操作接口
 ***********************************************************************************/

using System;
using WorldMapBase.Tile;

namespace WorldMapBase.Display
{
    /// <summary>
    /// 显示命令相关的操作接口
    /// </summary>
    public interface IDisplayCommandInterface
    {
        /// <summary>
        /// 添加展示命令并返回命令ID，命令执行后会进行回调
        /// </summary>
        /// <param name="resID">资源ID</param>
        /// <param name="callback">命令执行后的回调</param>
        /// <returns>添加的命令的ID</returns>
        int AddShowCommand(int lodIndex, int mapLayer, int resID, CommandTileElement tileElement);

        /// <summary>
        /// 添加隐藏指定元素的命令并返回命令ID。如果该元素之前没添加过隐藏命令，则生成命令添加。否则直接找到之前的隐藏命令并返回ID
        /// </summary>
        /// <param name="element">显示元素</param>
        /// <returns>添加的命令的ID</returns>
        int AddHideCommand(IDisplayElement element);

        /// <summary>
        /// 是否存在指定ID的命令
        /// </summary>
        /// <param name="commandID">命令ID</param>
        /// <returns>true：存在指定ID的命令 false：不存在</returns>
        bool HasCommand(int commandID);

        /// <summary>
        /// 移除指定ID的命令
        /// </summary>
        /// <param name="commandID">命令ID</param>
        /// <returns>true：移除成功 false：移除失败</returns>
        bool RemoveCommand(int commandID);

        /// <summary>
        /// 尝试移除包含指定资源ID的隐藏命令，并返回该隐藏命令包含的显示元素。如果成功则返回显示元素，失败则返回Null
        /// </summary>
        /// <param name="resID">资源ID</param>
        /// <returns>显示元素</returns>
        IDisplayElement TryRemoveHideCommandAndGetElement(int resID);
    }
}

